热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

金丝雀|蓝绿_蓝绿发布金丝雀发布灰度发布滚动发布AB测试

篇首语:本文由编程笔记#小编为大家整理,主要介绍了蓝绿发布金丝雀发布灰度发布滚动发布AB测试相关的知识,希望对你有一定的参考价值。金丝雀不是说它外形漂亮或有特点&

篇首语:本文由编程笔记#小编为大家整理,主要介绍了蓝绿发布金丝雀发布灰度发布滚动发布AB测试相关的知识,希望对你有一定的参考价值。


金丝雀不是说它外形漂亮或有特点,而是说它对瓦斯很灵敏。

这些名字玄而又玄,逼格十分高大上。到底是些啥?好像不了解一下,就完全看不懂当下流行的吹哔哔技术PPT了。


一、蓝绿发布

不停老版本,部署新版本然后进行测试。确认OK后将流量切到新版本。如果出现问题,则切回老版本。绿色是新版本,蓝色是老版本。


蓝绿发布的优点是升级切换和回退速度非常快,缺点是新老切换是全部切换,中间没有过渡,如果新版本有问题,则对用户体验有直接影响。并且需要两倍机器资源。

适用于对用户体验有一定容忍度的场景。同时机器资源有富余或者可以按需分配。


二、金丝雀发布

17 世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为瓦斯检测指标,以便在危险状况下紧急撤离。

所以金丝雀发布是在原有版本可用的情况下,部署一个新版本应用作为「金丝雀」做测试,以尽早发现、调整问题。

优点是用户体验影响小,若出现问题只影响少量用户。不足是发布自动化程度不够,发布期间可引发服务中断。


三、灰度发布

灰度发布是金丝雀发布的放大版。

与蓝绿部署不同的是,灰度发布不是非黑即白的部署方式,所以又称为灰度发布。它能够缓慢的将修改推广到一小部分用户,验证没有问题后,再推广到全部用户,以降低生产环境引入新功能带来的风险。

发布步骤:
1、将流量从待部署节点移出,更新该节点服务到待发布状态,将该节点称为金丝雀节点;

2、根据不同策略,将流量引入金丝雀节点。
策略可以根据情况指定,比如随机样本策略(随机引入)、狗粮策略(就是内部用户或员工先尝鲜)、分区策略(不同区域用户使用不同版本)、用户特征策略(这种比较复杂,需要根据用户个人资料和特征进行分流,类似于千人千面);

3、金丝雀节点验证通过后,选取更多的节点称为金丝雀节点,重复步骤1和步骤2,直到所有节点全部更新。

灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题。


四、滚动发布

金丝雀发布的自动版。

在金丝雀发布基础上的进一步优化改进,是一种自动化程度较高的发布方式,用户体验比较平滑,是目前成熟型技术组织所采用的主流发布方式。

步骤一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。这种部署方式相对于蓝绿部署,较为节约资源,不需要运行两个集群、两倍的实例数。可以分批部署,例如每次只取出集群的 20% 进行升级。

优点是用户体验影响小,体验较平滑。缺点是发布和回退时间比较缓慢,发布工具比较复杂。


五、AB测试

AB测试和发布不是一个维度的概念。它是效果验证的手段,之所以放在这里一起说,是因为很容易弄混。

AB测试是同时运行多个不同版本,根据策略,将一部分流量引入A版本,另外一部分流量引入B版本,CDEF……版本。通过分析不同版本的实际效果,选出最优解。最优解可能是一个版本获胜,取代另一个版本;也可能是催生出更多的版本,服务于用户;还有可能是多个版本在不同区域同时提供服务。

在开发过程中,也有可能采取AB测试,由不同的两组人马,对同一个功能同时开发不同的两个版本,PK,胜者为王,或者二合一之类。

参考文章
微服务部署:蓝绿发布、滚动发布、灰度发布、金丝雀发布
科普:蓝绿部署、金丝雀发布(灰度发布)、AB测试


推荐阅读
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
author-avatar
建铭琼伶俊涵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有